﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace IbsysII.Domain
{
    [Serializable]
    public class Teil
    {
        private int teilNr;
        private String bezeichnung;
        private Double preis;
        private int lagermenge;
        private Double lagerwert;
        private Double anteilStart;
        private Double lieferzeit;
        private Double lieferzeitabweichung;
        private String vewendung;
        private Double bestellkosten;
        private int ruestzeit;
        private int fertigungszeit;
        private int diskontmenge;
        private Char teileart;
        private int bedarf;
        private int bedarfN1;
        private int bedarfN2;
        private int bedarfN3;
        private int sicherheitsbestand;
        private int level;
        private int gehtEin;
        private char gleichteil;
        private int wartelisteÜbertrag;
        private double preisDirekt;
        private double koventDirekt;
        private int mengeDirekt;

       


     



        public List<Teil> lstZuordnung = new List<Teil>();
        public List<Arbeitsschritt> lstArbeitschritt = new List<Arbeitsschritt>();

        private int stuecklistenmenge;

        private Dictionary<Teil, Teil> dicZuordnung;

        public Teil() { }

        public int MengeDirekt
        {
            get { return mengeDirekt; }
            set { mengeDirekt = value; }
        }

        public double KoventDirekt
        {
            get { return koventDirekt; }
            set { koventDirekt = value; }
        }


        public double PreisDirekt
        {
            get { return preisDirekt; }
            set { preisDirekt = value; }
        }

        public int WartelisteÜbertrag
        {
            get { return wartelisteÜbertrag; }
            set { wartelisteÜbertrag = value; }
        }
        public int BedarfN2
        {
            get { return bedarfN2; }
            set { bedarfN2 = value; }
        }

        public int BedarfN3
        {
            get { return bedarfN3; }
            set { bedarfN3 = value; }
        }
        public int GehtEin
        {
            get { return gehtEin; }
            set { gehtEin = value; }
        }
        public int BedarfN1
        {
            get { return bedarfN1; }
            set { bedarfN1 = value; }
        }

        public Teil(int pId, String pBezeichnung, Double pPreis, int pLagermenge, Double pLagerwert, Double pAnteilStart )
        {
            this.teilNr = pId;
            this.bezeichnung = pBezeichnung;
            this.preis = pPreis;
            this.lagermenge = pLagermenge;
            this.lagerwert = pLagerwert;
            this.anteilStart = pAnteilStart;
        }

        public int Stuecklistenmenge
        {
            get { return stuecklistenmenge; }
            set { stuecklistenmenge = value; }
        }

        public int Level
        {
            get { return level; }
            set { level = value; }
        }

        public int TeilNr
        {
            get{ return teilNr;}
            set{ teilNr = value;}
        }
        public String Bezeichnung
        {
            get{ return bezeichnung;}
            set{ bezeichnung = value;}
        }

        public int Sicherheitsbestand
        {
            get { return sicherheitsbestand; }
            set { sicherheitsbestand = value; }
        }

        public Double Preis
        {
            get{ return preis;}
            set{ preis = value;}
        }
        public int Lagermenge
        {
            get{ return lagermenge;}
            set{ lagermenge = value;}
        }
        public Double Lagerwert
        {
            get{ return lagerwert;}
            set{ lagerwert = value;}
        }
        public Double AnteilStart
        {
            get{ return anteilStart;}
            set{ anteilStart = value;}
        }
        public Double Lieferzeit
        {
            get { return lieferzeit; }
            set { lieferzeit = value; }
        }
        public Double Lieferzeitabweichung
        {
            get { return lieferzeitabweichung; }
            set { lieferzeitabweichung = value; }
        }
        public String Vewendung
        {
            get { return vewendung; }
            set { vewendung = value; }
        }
        public Double Bestellkosten
        {
            get { return bestellkosten; }
            set { bestellkosten = value; }
        }
        public int Ruestzeit
        {
            get { return ruestzeit; }
            set { ruestzeit = value; }
        }
        public int Fertigungszeit
        {
            get { return fertigungszeit; }
            set { fertigungszeit = value; }
        }
        public int Diskontmenge
        {
            get { return diskontmenge; }
            set { diskontmenge = value; }
        }
        public Char Teileart
        {
            get { return teileart; }
            set { teileart = value; }
        }
        public int Bedarf
        {
            get { return bedarf; }
            set { bedarf = value; }
        }
        public Dictionary<Teil, Teil> DicZuordnung
        {
            get { return dicZuordnung; }
            set { dicZuordnung = value; }
        }

        public char Gleichteil
        {
            get { return gleichteil; }
            set { gleichteil = value; }
        }
        public Teil CreateDeepCopy(Teil inputcls)
        {
            MemoryStream m = new MemoryStream();
            BinaryFormatter b = new BinaryFormatter();
            b.Serialize(m, inputcls);
            m.Position = 0;
            return (Teil)b.Deserialize(m);
        }

        public override string ToString()
        {
            return this.level + " " + this.teilNr + " " + this.stuecklistenmenge + " " + this.preis;
        }
    }
}
